package br.com.eventest.control;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;

import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.submenu.Submenu;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;

import br.com.eventest.model.Permissoe;
import br.com.eventest.model.Seguranca;
import br.com.eventest.service.SegurancaService;

@ManagedBean(name = "segurancaBean")
@SessionScoped
public class SegurancaControl implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	private SegurancaService segurancaService;

	private MenuModel menuModel;

	private void processaMenu(List<Seguranca> listSeguranca,List<Permissoe> listPermissoes, Submenu subMenu, MenuModel model) {
		boolean isAutorizado = false;

		for (Seguranca segurancaItem : listSeguranca) {

			for (Permissoe permissoes : listPermissoes) {
				if (permissoes.getSeguranca().getCodigo()==segurancaItem.getCodigo()) {
					isAutorizado = true;
					break;
				} else {
					isAutorizado = false;
				}

			}
			
			if (!isAutorizado){
				isAutorizado = false;
				continue;
			}
			
			if (segurancaItem.getSegurancas() != null && segurancaItem.getSegurancas().size() > 0) {

				Submenu subMenuItem = new Submenu();
				subMenuItem.setLabel(segurancaItem.getDescricao());

				if (subMenu != null) {
					subMenu.getChildren().add(subMenuItem);
				} else {
					model.addSubmenu(subMenuItem);
				}

				processaMenu(segurancaItem.getSegurancas(), listPermissoes,
						subMenuItem, model);
			} else {
				MenuItem menuItem = new MenuItem();
				menuItem.setValue(segurancaItem.getDescricao());
				menuItem.setUrl("#");

				if (subMenu != null) {
					subMenu.getChildren().add(menuItem);
				} else {
					model.addMenuItem(menuItem);
				}

			}
		}
	}

	public MenuModel getMenuModel() {
		List<Seguranca> listSeguranca = segurancaService.getListSeguranca("Seguranca.findAll", new Object[] {});
		List<Permissoe> listPermissoe = segurancaService.getListPermissoes(1);
		menuModel = new DefaultMenuModel();
		processaMenu(listSeguranca,listPermissoe, null, menuModel);
		return menuModel;
	}

	public void setMenuModel(MenuModel menuModel) {
		this.menuModel = menuModel;
	}

	public void setSegurancaService(SegurancaService segurancaService) {
		this.segurancaService = segurancaService;
	}

}
